package cn.com.generaldata.os.ws.intf;

import java.io.IOException;
import java.util.Date;
import java.util.List;

import javax.jws.WebMethod;
import javax.jws.WebService;

import cn.com.generaldata.os.newpojo.SystemCodedic;
import cn.com.generaldata.os.result.ReportVerityQueryResult;
import cn.com.generaldata.os.vo.ReportVO;
import cn.com.generaldata.os.vo.ReportAttachVO;
import cn.com.generaldata.os.vo.ReportHistoryVO;
import cn.com.generaldata.os.vo.ReportMarkingVO;
import cn.com.generaldata.os.vo.ReportPerformVO;
import cn.com.generaldata.os.vo.ReportTypeVO;
import cn.com.generaldata.os.vo.ResultVO;
import cn.com.generaldata.os.vo.UnitVO;
import cn.com.generaldata.os.vo.VersionVO;

@WebService
public interface ReportWSInterface {

	/**
	 * @function 导入报表
	 * @param
	 * @return
	 */
	@WebMethod
	String importReport(String reportOperatorId, String reportProxyId, String reportTypeId, String timeType,
			String yearType, String timeDate, String unitIndustryId, String reportVersion, String quarterDate,
			byte[] content, String fileName, String fileType);

	@WebMethod
	List<ReportTypeVO> queryReportTypesByPara(String industryId, String code, String version);

	/**
	 * @function 导入导出查询报表
	 * @param
	 * @return
	 */
	ResultVO<ReportVO> queryReportsExport(String userId, String userAreaId, Short checkStatus, String userUnit,
			String reportTypeNo, Date startingReportDate, Date endingReportDate, Integer pageNum);

	/**
	 * @function 修改说明
	 * @param
	 * @return
	 */
	void modiAttachDisposal(String attachId, String attachDisposal);

	/**
	 * @function 处理文件
	 * @param
	 * @return
	 */
	void modiReportAttachsDisposal(List<String> ids);

	/**
	 * @function 查询下级报表文件
	 * @param
	 * @return
	 */
	ResultVO<ReportAttachVO> queryHandleAttach(String userAreaId, Date searchDate, Date endDate, Integer pageNum);

	/**
	 * @function 查询报表制度
	 * @param
	 * @return
	 */
	List<SystemCodedic> queryType();

	/**
	 * @function 按年份查询版本
	 * @param year 年份
	 * @return
	 */
	VersionVO queryVersionByYear(String year, String type);

	/**
	 * @function 按用户ID查询附件
	 * @param id 用户Id
	 * @return
	 */
	ResultVO<ReportAttachVO> queryReportAttach(String loginName, Date searchDate, Date endDate, Integer pageNum);

	/**
	 * @function 根据查询条件查询报表
	 * @param userId 填报用户Id，查询企业人员需传递此参数，海洋局人员传Null值即可
	 * @param checkStatus 报表状态
	 * @param reportTypeNo 表号（如：海统X表）
	 * @param reportDate 上报时间
	 * @param pageNum 页码
	 * @return
	 */
	@WebMethod
	ResultVO<ReportVO> queryReports(String userId, Short checkStatus, String reportTypeNo, Date startingReportDate,
			Date endingReportDate, Integer pageNum);

	@WebMethod
	ResultVO<ReportVO> queryReportsByOperatorAndUnit(String userId, String userAreaId, Short checkStatus, String userUnit,
			String reportTypeNo, Date startingReportDate, Date endingReportDate, Integer pageNum);

	/**
	 * @function 按通知ID查询附件
	 * @param id 通知Id
	 * @return
	 */
	@WebMethod
	ResultVO<ReportAttachVO> queryReportAttachList(String ids);

	// 添加附件文件
	@WebMethod
	String addReportAttachments(ReportAttachVO reportAttach);

	/**
	 * @function 按ID查询附件
	 * @param id 附件Id
	 * @return
	 */
	@WebMethod
	ReportAttachVO queryReportAttachById(String id);

	@WebMethod
	String uploadFile(String loginName, String userUnit, byte[] content, String fileName, String fileType,
			String attachExplain, String status) throws IOException;

	@WebMethod
	ResultVO<ReportVO> queryReportsByParent(String reportProxyId, String userId, Short checkStatus, String reportSystem,
			String reportTypeCode, String reportVersion, Date startingReportDate, Date endingReportDate, String areaId,
			Integer pageNum, String typeNo);

	@WebMethod
	ResultVO<ReportVO> queryReportsByProxy(String reportProxyId, String userId, Short checkStatus, String reportSystem,
			String reportTypeCode, String reportVersion, Date startingReportDate, Date endingReportDate, String areaId,
			Integer pageNum, String flag, String typeNo, String unitName);

	/**
	 * 按地区查找报表
	 * 
	 * @param userId 用户id
	 * @param userAreaId 用户地区id
	 * @param checkStatus 报表状态
	 * @param reportTypeNo 报表类型号码
	 * @param startingReportDate 报表开始日期
	 * @param endingReportDate 结束日期
	 * @param pageNum 分页
	 * @return
	 */
	@WebMethod
	ResultVO<ReportVO> queryReportsByArea(String userId, String userAreaId, Short checkStatus, String reportSystem,
			String reportTypeNo, String versionNumber, Date startingReportDate, Date endingReportDate, Integer pageNum);

	/**
	 * 根据用户地区查找将要导出的报表 (省级用户导出报表，包括通过的和驳回的)
	 * 
	 * @param userId 用户id
	 * @param userAreaId 用户地区id
	 * @param checkStatus 报表状态
	 * @param reportTypeNo 报表类型号码
	 * @param startingReportDate 报表开始日期
	 * @param endingReportDate 结束日期
	 * @param pageNum 分页
	 * @return
	 */
	@WebMethod
	ResultVO<ReportVO> queryExportReportsByArea(String userId, String userAreaId, Short checkStatus, String reportTypeNo,
			String versionNumber, Date startingReportDate, Date endingReportDate, Integer pageNum);

	// 按地区和单位查找报表; 自加
	@WebMethod
	ResultVO<ReportVO> queryReportsByAreaAndUnit(String userId, String userAreaId, Short checkStatus, String userUnit,
			String reportTypeNo, Date startingReportDate, Date endingReportDate, Integer pageNum);

	// 自加， 根据用户地区和企位查找报表
	@WebMethod
	ResultVO<ReportVO> queryReportsByAreaAndIndustry(String userId, String userAreaId, Short checkStatus, String userUnit,
			String reportTypeNo, Date startingReportDate, Date endingReportDate, Integer pageNum);

	// 查询区域企业报表
	ResultVO<ReportVO> queryEnterpriseReportsByArea(String userAreaId, Short checkStatus, String reportSystem,
			String reportTypeNo, String reportVersion, Date startingReportDate, Date endingReportDate, Integer pageNum);

	/**
	 * 自加， 根据报表用户和代填用户id查找报表
	 * 
	 * @author FuBin
	 */
	@WebMethod
	ResultVO<ReportVO> queryReportsByUserAndProxy(String userId, String proxyId, Short checkStatus, String reportSystem,
			String reportTypeNo, String reportVersion, Date startingReportDate, Date endingReportDate, Integer pageNum);

	/**
	 * 创建新的报表类型
	 * 
	 * @param reportName 新建报表名称
	 * @return reportCode 新建报表代码
	 */
	String createReportType(String reportName);

	/**
	 * 
	 * @function 批量修改Report状态（批量提交、批量驳回操作）
	 * @param checkStatus 提交或驳回的状态值
	 * @param ids
	 * @param operatorId
	 */
	@WebMethod
	void batchChangeStatus(Short checkStatus, List<String> ids, String operatorId, String common);

	/**
	 * @function 删除报表
	 * @param ids
	 * @return
	 */
	@WebMethod
	void removeReports(List<String> ids);

	/**
	 * @function 根据主键查询报表类型
	 * @param id
	 * @return
	 */
	@WebMethod
	ReportTypeVO queryReportTypeById(String id);

	/**
	 * @function 查询所有报表类型
	 * @return
	 */
	@WebMethod
	List<ReportTypeVO> queryReportTypes();

	@WebMethod
	void removeReportAttachs(List<String> ids);

	/**
	 * @function 根据用户ID查询该用户所能访问的报表类型
	 * @param userId
	 * @return
	 */
	@WebMethod
	List<ReportTypeVO> queryReportTypesByUserId(String userId);

	/**
	 * - 自加
	 * 
	 * @function 根据用户ID查询所选用户尚未提交的报表类型 省区局调用此方法
	 * @param userId
	 * @return
	 */
	@WebMethod
	ResultVO<ReportTypeVO> queryUncommittedReportTypesByUserId(String eUserId, short checkStatus, Date startingReportDate,
			Date endingReportDate, Integer pageNum);

	/**
	 * - 自加
	 * 
	 * @function 根据用户ID查询所选用户尚未提交的报表类型 总局调用此方法
	 * @param userId
	 * @return
	 */
	@WebMethod
	ResultVO<ReportTypeVO> queryUncommittedReportTypesByOperatorId(String eUserId, short checkStatus,
			Date startingReportDate, Date endingReportDate, Integer pageNum);

	/**
	 * @Function 根据行业id查询该行业下的所有报表类型
	 * @param industryId
	 * @return
	 */
	@WebMethod
	List<ReportTypeVO> queryReportTypesByIndustryId(String industryId);

	/**
	 * @function 导出全部已审核的报表
	 * @return
	 */
	@WebMethod
	String exportPassedReports(String userId, String areaId);

	/**
	 * 自加
	 * 
	 * @function 导入报表
	 * @return
	 */
	@WebMethod
	boolean importReports();

	/**
	 * @function 导入未审核的报表
	 * @return
	 * 
	 @WebMethod
	 *            boolean importReports();/
	 * 
	 *            /**
	 * @function 根据用户编码、报表编码，判断用户是否能查看该报表
	 * @param userId
	 * @param reportId
	 * @return
	 */
	@WebMethod
	boolean checkReportViewStatus(String userId, String reportId);

	/**
	 * @function 查询指定报表的审核记录
	 * @param reportId
	 * @return
	 */
	@WebMethod
	List<ReportHistoryVO> showHistory(String reportId);

	@WebMethod
	List<ReportMarkingVO> showReportMarking(String reportId);

	@WebMethod
	List<ReportVO> queryReportsByReportId(String reportId);

	// sunlei add --- 20121121
	// @WebMethod
	// Boolean queryIsEIReports();

	@WebMethod
	Boolean exportEIReport(String reportProxyId, String userId, Short checkStatus, String reportSystem,
			String reportTypeCode, String reportVersion, Date startingReportDate, Date endingReportDate,
			Integer pageNum, String unitName);

	@WebMethod
	boolean exportUser(List<String> ids);

	@WebMethod
	boolean exportOverUser(List<String> ids);

	@WebMethod
	ResultVO<ReportVO> importEIReport(int pageNumber, int PageSize);

	@WebMethod
	Boolean cleanEIReport();

	// 获取所有的版本信息
	@WebMethod
	ResultVO<VersionVO> queryReportVersion(String code);

	// 查看当前报表制度是否存在
	@WebMethod
	VersionVO isVersionSystem(String vSystem);

	// 获取最高版本的报表信息
	@WebMethod
	String queryReportMaxVersion();

	// 查询绩效评估
	@WebMethod
	List<ReportPerformVO> reportAccount(String unitId, String timeType, String type);

	@WebMethod
	List<ReportTypeVO> queryReportTypesByParam(String version, String type);

	@WebMethod
	List<ReportVO> reportAlert(String userid);

	Boolean exportReportType();

	ResultVO<ReportVO> queryAllReport(String areaId, String unitName, String reportSystem, String reportTypeId,
			String industryId, String reportVersion, Date startingReportDate, Date endingReportDate, Integer pageNum,
			String status, String typeNo);

	List<String> queryReportTypesUnit(String unitId);

	String generalExcel(List<String> ids);

	List<ReportTypeVO> queryTypeNo(Integer type);

	String importReportMulti(String reportOperatorId, String reportProxyId, byte[] content, String fileName,
			String fileType);

	@WebMethod
	ReportVerityQueryResult getVerifyReortDetail(String userId, String checkStatus, String reporTypeId,
			Date startingReportDate, Date endingReportDate, String flag, String newTypeId, String year);

	@WebMethod
	String mutiExport(String userId, String checkStatus, String reporTypeId, Date startingReportDate,
			Date endingReportDate, String flag, boolean showSum, String newTypeId, String year);

	List<ReportTypeVO> queryReportTypesSum(String version, String type);

	String importUnitInfo(byte[] content, String fileName, String fileType, String typeId, String year);

	List<UnitVO> queryNoUnits(String roleId, String areaId, String year, String typeId, String reportType);
}
